package com.sping.gobang.common.config.interceptor;

import com.sping.gobang.common.constant.Constants;
//import com.sping.gobang.common.util.JWTUtils;
import com.sping.gobang.pojo.datapbject.User;
import io.jsonwebtoken.Claims;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import java.nio.charset.StandardCharsets;

@Component
@Slf4j
public class LoginInterceptor implements HandlerInterceptor {//配置拦截器


    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//        String token = request.getHeader(Constants.USER_TOKEN);
//        log.info("从header中获取token:"+token);
//        if(token==null){
//            log.error("令牌为null,没有登陆");
//            response.setStatus(401);
//            return false;
//        }
//        // 验证令牌是否正确
//        Claims claims= JWTUtils.parseJWT(token);
//        if(claims==null){
//            log.error("令牌信息错误,请重新登陆");
//            response.setStatus(401);
//            return false;
//        }
//        //从claims中获取用户名
//        String username=claims.get("name",String.class);
//        //将用户信息存储到请求属性中
//        request.setAttribute("currentUsername",username);
//        return true;
        HttpSession session = request.getSession(false);//false->不存在会话，则不会创建会话
        if(!checkUser(session)){
            response.setContentType("text/html;charset-utf-8");
            response.setStatus(401);
            String msg="用户未登陆";
            response.getOutputStream().write(msg.getBytes(StandardCharsets.UTF_8));
            return false;
        }
        return true;


    }
    public boolean checkUser(HttpSession session){
        if(session==null||session.getAttribute(Constants.SESSION_USER_KEY)==null){
            log.error("用户未登录");
            return false;
        }
        User user= (User) session.getAttribute(Constants.SESSION_USER_KEY);
        if(user==null||user.getUserId()<1||user.getUsername()==""){
            log.error("用户未登陆");
            return false;
        }
        log.info("用户已登陆");
        return true;
    }

}
